define('ace/mode/ada_highlight_rules', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextHighlightRules = require('./text_highlight_rules').TextHighlightRules

  var AdaHighlightRules = function() {
    var keywords = 'abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|' +
'access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|' +
'array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|' +
'body|private|then|if|procedure|type|case|in|protected|constant|interface|until|' +
'|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor'

    var builtinConstants = (
      'true|false|null'
    )

    var builtinFunctions = (
      'count|min|max|avg|sum|rank|now|coalesce|main'
    )

    var keywordMapper = this.createKeywordMapper({
      'support.function': builtinFunctions,
      'keyword': keywords,
      'constant.language': builtinConstants
    }, 'identifier', true)

    this.$rules = {
      'start': [{
        token: 'comment',
        regex: '--.*$'
      }, {
        token: 'string', // " string
        regex: '".*?"'
      }, {
        token: 'string', // character
        regex: "'.'"
      }, {
        token: 'constant.numeric', // float
        regex: '[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b'
      }, {
        token: keywordMapper,
        regex: '[a-zA-Z_$][a-zA-Z0-9_$]*\\b'
      }, {
        token: 'keyword.operator',
        regex: '\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|='
      }, {
        token: 'paren.lparen',
        regex: '[\\(]'
      }, {
        token: 'paren.rparen',
        regex: '[\\)]'
      }, {
        token: 'text',
        regex: '\\s+'
      }]
    }
  }

  oop.inherits(AdaHighlightRules, TextHighlightRules)

  exports.AdaHighlightRules = AdaHighlightRules
})

define('ace/mode/ada', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/ada_highlight_rules', 'ace/range'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextMode = require('./text').Mode
  var AdaHighlightRules = require('./ada_highlight_rules').AdaHighlightRules
  var Range = require('../range').Range

  var Mode = function() {
    this.HighlightRules = AdaHighlightRules
    this.$behaviour = this.$defaultBehaviour
  }
  oop.inherits(Mode, TextMode);

  (function() {
    this.lineCommentStart = '--'

    this.getNextLineIndent = function(state, line, tab) {
      var indent = this.$getIndent(line)

      var tokenizedLine = this.getTokenizer().getLineTokens(line, state)
      var tokens = tokenizedLine.tokens

      if (tokens.length && tokens[tokens.length - 1].type == 'comment') {
        return indent
      }
      if (state == 'start') {
        var match = line.match(/^.*(begin|loop|then|is|do)\s*$/)
        if (match) {
          indent += tab
        }
      }

      return indent
    }

    this.checkOutdent = function(state, line, input) {
      var complete_line = line + input
      if (complete_line.match(/^\s*(begin|end)$/)) {
        return true
      }

      return false
    }

    this.autoOutdent = function(state, session, row) {
      var line = session.getLine(row)
      var prevLine = session.getLine(row - 1)
      var prevIndent = this.$getIndent(prevLine).length
      var indent = this.$getIndent(line).length
      if (indent <= prevIndent) {
        return
      }

      session.outdentRows(new Range(row, 0, row + 2, 0))
    }

    this.$id = 'ace/mode/ada'
  }).call(Mode.prototype)

  exports.Mode = Mode
});
(function() {
  window.require(['ace/mode/ada'], function(m) {
    if (typeof module === 'object' && typeof exports === 'object' && module) {
      module.exports = m
    }
  })
})()
